﻿//#include <iostream>
//using namespace std;
//
//typedef long long ll;
//
//ll a[65] = { 0 };
//int cnt = 0;
//
//void aaa(ll x)
//{
//	ll ret = 0;
//	for (ll i = 1; i <= x / i; i++)
//	{
//		if (x % i == 0)
//		{
//			if (x / i == i)
//			{
//				ret += 1;
//			}
//			else
//			{
//				ret += 2;
//			}
//		}
//	}
//
//	if (ret <= 60 && a[ret] == 0)
//	{
//		a[ret] = x;
//		cnt++;
//	}
//}
//
//int main()
//{
//	for (long long i = 1; i >= 0; i++)
//	{
//		aaa(i);
//		if (cnt == 20)
//		{
//			break;
//		}
//	}
//
//	ll sum = 0;
//
//	for (int i = 1; i <= 60; i++)
//	{
//		sum += a[i];
//		cout << a[i] << " ";
//	}
//	cout << endl << sum << endl;
//	return 0;
//}




//#include <iostream>
//#include <algorithm>
//#include <assert.h>
//using namespace std;

//int main()
//{
//	// 以下的p、b、c、*p都是左值
//
//	int* p = new int(10);
//	int b = 1;
//	const int c = 9;
//
//	// 以下几个是对上面左值的左值引用
//	int*& rp = p;
//	int& rb = b;
//	const int& rc = c;
//	int& pvalue = *p;
//
//	return 0;
//}

//int main()
//{
//	double x = 1.2;
//	double y = 2.3;
//
//	// 以下几个都是常见的右值
//	10;
//	x + y;
//	fmin(x, y);
//
//	// 以下几个都是对右值的右值引用
//	int&& a = 10;
//	double&& sum = x + y;
//	double&& c = fmin(x, y);
//
//	return 0;
//}

//int main()
//{
//	double x = 1.2;
//	double y = 2.3;
//	// 这里编译会报错：error C2106: “=”: 左操作数必须为左值
//	10 = 1;
//	x + y = 1;
//	fmin(x, y) = 1;
//	return 0;
//}


//int main()
//{
//	// 左值引用只能引用左值，不能引用右值。
//	int a = 10;
//	int& ra1 = a;  // ra为a的别名
//	//int& ra2 = 10;   // 编译失败，因为10是右值
//	
//	// const左值引用既可引用左值，也可引用右值。
//	const int& ra3 = 10;
//	const int& ra4 = a;
//	return 0;
//}

//int main()
//{
//	// 右值引用只能右值，不能引用左值。
//	int&& r1 = 10;
//
//	int a = 10;
//	int&& r2 = a;
//
//	// 右值引用可以引用move以后的左值
//	int&& r3 = std::move(a);
//	return 0;
//}


#include <iostream>
#include <algorithm>
#include <cstring>
#include <string>
#include <map>
#include <functional>
using namespace std;

const int N = 110;

long long a[N] = { 0 };
long long f1[N][N] = { 0 };
long long f2[N][N] = { 0 };
char str[N];

int n;

int main()
{
	//map<char, function<long long(long long, long long)>> ppp = {
	//	{'t', [](long long a, long long b)->long long {return a + b; }},
	//	{'x', [](long long a, long long b)->long long {return a * b; }},
	//};

	cin >> n;
	for (int i = 1; i <= n; i++)
	{
		cin >> str[i] >> a[i];
		a[i + n] = a[i];
		str[i + n] = str[i];
	}
	int m = 2 * n;

	memset(f1, -0x3f, sizeof(f1));
	memset(f2, 0x3f, sizeof(f2));
	for (int i = 1; i <= m; i++)
	{
		f1[i][i] = a[i];
		f2[i][i] = a[i];
	}

	for (int len = 2; len <= n; len++)
	{
		for (int i = 1; i + len - 1 <= m; i++)
		{
			int j = i + len - 1;
			for (int k = i; k < j; k++)
			{
				//[i,k]  [k + 1, j]
				if (str[k + 1] == 't')
				{
					f1[i][j] = max(f1[i][j], f1[i][k] + f1[k + 1][j]);
					f2[i][j] = min(f2[i][j], f2[i][k] + f1[k + 1][j]);
				}
				else
				{
					f1[i][j] = max(f1[i][j], max(f1[i][k] * f1[k + 1][j], f2[i][k] * f2[k + 1][j]));
					f2[i][j] = min(f2[i][j], min(f1[i][k] * f1[k + 1][j], min(f2[i][k] * f2[k + 1][j], min(f1[i][k] * f2[k + 1][j], f2[i][k] * f1[k + 1][j]))));
				}
			}
		}
	}

	long long ret = -0x3f3f3f3f3f3f3f3f;
	for (int i = 1; i <= n; i++)
	{
		ret = max(ret, f1[i][i + n - 1]);
	}
	cout << ret << endl;

	for (int i = 1; i <= n; i++)
	{
		if (f1[i][i + n - 1] == ret)
		{
			cout << i << " ";
		}
	}
	return 0;
}